package cn.edu.huanu.pojo;

import java.util.ArrayList;
import java.util.List;
import java.util.Objects;
import java.util.Optional;

/**
 * 描述购物车的对象
 * @author hb
 * @date 2025-11-14 15:46:34
 */
public class Cart {
    private List<CartItem> items;
    //总金额
    private Double account;


    public Cart(){
        items =new ArrayList<>();
    }
    public void clear(){
        items.clear();
    }

    public void updateQty(Integer id,int qty){
        for(CartItem item:items){
            Book book =item.getProduct();
            if(id.equals(book.getId())){
                item.setQty(qty);
            }
        }
    }

    public void addItem(Book book){
        CartItem ct=new CartItem(book,1);
        Optional<CartItem> existingItem = items.stream().filter(item -> item.equals(ct)).findFirst();

        if (existingItem.isPresent()){
            CartItem item = existingItem.get();
            item.setQty(item.getQty()+1);
        }else{
            items.add(ct);
        }


        //CartItem ct=new CartItem(book,1);
        //boolean flag = false;
        //for(CartItem item:items){
        //    if(item.equals(ct)){
        //        item.setQty(item.getQty()+1);
        //        flag =true;
        //        break;
        //    }
        //}
        //if(!flag){
        //    items.add(ct);
        //}

        //if(items.contains(ct)){
        //     items.forEach(item->{
        //          if(item.equals(ct)){
        //              //设置数量
        //              item.setQty(item.getQty()+1);
        //          }
        //     });
        //}else{
        //    items.add(ct);
        //}
    }

    public double totalPrice(){

       return items.stream()
                // 映射每个 CartItem 计算金额（double 乘法）
                .mapToDouble(item -> item.getProduct().getPrice() * item.getQty())
                // 求和（返回 double 类型）
                .sum();
        //double total =0;
        //for (CartItem item:items){
        //    total+= item.getProduct().getPrice()* item.getQty();
        //}
        //return total;
    }

    public void removeItem(Integer pid){
        if(!Objects.isNull(pid)){
            items.forEach(item->{
                 if (item.getProduct().getId()==pid){
                     items.remove(item);
                 }
            });
        }
    }

    public List<CartItem> getItems() {
        return items;
    }

    public void setItems(List<CartItem> items) {
        this.items = items;
    }

    public Double getAccount() {
        return account;
    }

    public void setAccount(Double account) {
        this.account = account;
    }
}
